/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ik.RestauranteBar.SMO.Manejadores;

import java.util.List;
import javax.persistence.Query;
import org.ik.RestauranteBar.SMO.Encapsulados.Clientes;
import org.ik.RestauranteBar.SMO.Manejadores.Conectores.ConexionMySQL;

/**
 *
 * @author Malkavian
 */
public class ManejadorClientes extends ConexionMySQL {

    private static ManejadorClientes manager;

    public static ManejadorClientes getInstance() {
        if (manager == null) {
            manager = new ManejadorClientes();
        }
        return manager;
    }

    private ManejadorClientes() {
    }

    public List<Clientes> getClientes() {
        List<Clientes> clientes = null;

        try {
            Query query = getEntity().createNamedQuery("Clientes.findAll");
            clientes = query.getResultList();
        } catch (Exception ex) {
        }

        return clientes;
    }

    public Clientes getClientePorTelefono(String id) {
        Clientes cliente = null;

        try {
            Query query = getEntity().createNamedQuery("Clientes.findByTelefono");
            query.setParameter("telefono", id);
            cliente = (Clientes) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public Clientes getClientePorEstado(boolean estado) {
        Clientes cliente = null;

        try {
            Query query = getEntity().createNamedQuery("Clientes.findByEstado");
            query.setParameter("estado", estado);
            cliente = (Clientes) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public Clientes getClientePorSector(String sector) {
        Clientes cliente = null;

        try {
            Query query = getEntity().createNamedQuery("Clientes.findBySector");
            query.setParameter("sector", sector);
            cliente = (Clientes) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public Clientes getClientePorNombreApellido(String nombre, String apellido) {
        Clientes cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Clientes c WHERE c.nombre = ? AND c.apellido = ?");
            query.setParameter(1, nombre);
            query.setParameter(2, apellido);
            cliente = (Clientes) query.getSingleResult();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public List<Clientes> getListaClientePorNombreApellido(String nombre, String apellido) {
        List<Clientes> cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Clientes c WHERE c.nombre = ? AND c.apellido = ?", Clientes.class);
            query.setParameter(1, nombre);
            query.setParameter(2, apellido);
            cliente = query.getResultList();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public List<Clientes> getClientePorNombre(String nombre) {
        List<Clientes> cliente = null;

        try {
            Query query = getEntity().createNativeQuery("SELECT * FROM Clientes c WHERE c.nombre = ?");
            query.setParameter(1, nombre);
            cliente = query.getResultList();
        } catch (Exception ex) {
        }

        return cliente;
    }

    public Boolean insertarClientes(Clientes cliente) {

        try {

            getEntity().getTransaction().begin();
            getEntity().persist(cliente);
            getEntity().getTransaction().commit();
            return true;

        } catch (Exception ex) {

            return false;
        }

    }

    public Boolean actualizarClientes(Clientes cliente) {

        try {

            getEntity().getTransaction().begin();
            getEntity().merge(cliente);
            getEntity().getTransaction().commit();
            return true;

        } catch (Exception ex) {

            return false;
        }

    }
}